// 二次封装axios
import router from '@/router'
// import { useStore } from '@/'
import axios, { type Method } from 'axios'
// import { Toast } from 'vant'
// 1. axios的配置
// 1.1 创建一个新的axios实例，配置基准地址，配置响应超时时间
// 1.2 添加请求拦截器，在请求头携带token
// 1.3 添加响应拦截器，判断业务是否成功，剥离无效的数据，401错误拦截去登录页面(删除当前用户信息)，
const baseURL = 'https://consult-api.itheima.net/'
const instance = axios.create({
  baseURL,
  timeout: 10000
})

instance.interceptors.request.use(
  config=>{
     if(localStorage.getItem('token')){
      config.headers.Authorization ="Bearer "+localStorage.getItem("token")
     }
     console.log(config.headers);
     
      return config
  },
  err => {
   return Promise.reject(err)
  }
)
instance.interceptors.response.use(
  res=>{
      // console.log(res);
      if(res.data.code ==0){
          // ElMessage({
          //     message: res.data.msg,
          //     type: 'success',
          //   })
      }
      return res.data
  },
  err => {
      return Promise.reject(err)
  }
)

type Data<T> = {
  code: string
  message: string
  data: T
}
const request = <T>(url: string, method: Method = 'get', submitData?: object) => {
  // 泛型的第二个参数，可以自定义响应数据类型
  return instance.request<T, Data<T>>({
    url,
    method,
    // 区分get和其他请求post
    // get 提交数据，选项：params
    // 其他请求post 提交数据，选项：data
    [method.toLowerCase() === 'get' ? 'params' : 'data']: submitData
  })
}

export { baseURL, instance, request }
